들어가며
남봉진동지수(SOI)는 호주의 Tahiti와 Darwin 사이의 정규화된 대기압 편차로 정의된다. 이 지수는 엘리뇨(El Niño)와 라니냐(La Niña) 동안에 열대 태평양의 서부와 동부사이에서 발생하는 대규모의 대기압 변동값이다. 일반적으로 SOI의 스무드(Smoothed) 시계열은 열대 태평양 동부해역에 걸쳐 해수온도의 변동과 매우 잘 일치한다.
SOI의 음의 구간은 타이티에서의 below-normal 대기압과 Darwin에서의 above-normal 대기압을 의미한다. SOI의 음(양)의 값 시기는 엘리뇨(라니냐) 에피소드 시기에 동부 열대태평양에서 비정상적으로 더운(차가운) 해수와 일치한다. SOI 계산방법은 Climate Prediction Center SOI 페이지에서 확인할 수 있다.
Albers (2020) 가 개발한 rsoi 패키지는 여러가지의 북반구와 남반구의 기후지수에 접근할수 있는 툴을 제공한다. 대표적인 지수로는 - Southern Oscillation Index - Oceanic Nino Index - North Pacific Gyre Oscillation - North Atlantic Oscillation - Arctic Oscillation - Antarctic Oscillation - Multivariate ENSO Index Version 2
이 포스트에서는 패키지를 설치하고 데이터를 다운로드하여 시각화는 방법을 설명한다. rsoi패키지는 ’Comprehensive R Archive Network (CRAN)’에서 이용할 수 있으며 아래와 같이 청크(chunk)로 설치할 수 있다.
#install.packages("rsoi")
패키지를 설치한 후 함수들에 접근하기 위해 세션으로 패키지를 불러와야 한다. 먼저 library 함수를 이용하여 세션으로 패키지를 불러오고, 데이터 조작과 플롯팅을 하기 위한 툴로 tidyverse(Wickham 2017)을 불러온다.
library(rsoi)
library(tidyverse)
rsoi의 장점은 지수들을 다운로드하는 모든 함수가 download_ 다음에 특정한 지수명들로 시작한다는 것이다. 예를 들어, 함수 download_soi는 남방진동지수 데이터에 접근하고 다운로드 하는데 사용된다. 다운로드된 SOI 데이터는 데이터프레임 형식이고 str함수나 dplyr 패키지(Wickham et al. 2018)의 glimpse함수로 데이터셋의 내부구조를 살펴볼 수 있다. 표 1.은 다운로드한 남방지수값을 간단하게 보여준다.
soi = download_soi()
soi
데이터를 얻게된 후에는 SOI 값을 음(양)의 시기로 구분하여 시각화할 수 있다. 이는 엘리뇨(라니냐) 에피소드 시기에 동부 열대 태평양의 비이상적인 고수온(저수온)과 일치한다. 그림 1은 ggplot2패키지(Wickham 2016)로 SOI의 진동을 플롯팅한 것을 보여준다.
soi.status = soi %>% mutate(status = if_else(SOI >= 0, "positive", "negative"))
soi.plot = ggplot(data = soi.status, aes(x = Date, y = SOI, fill = status))+
geom_col()+
# ggsci::scale_fill_d3() +
scale_fill_manual(values = c("red", "blue")) +
cowplot::theme_minimal_grid()+
labs(x = "", y = "SOI Index") +
scale_y_continuous(breaks = seq(-3,3,1)) +
# scale_x_date(date_breaks = "10 years", date_labels = "%Y")+
theme(legend.position = "none", panel.grid = element_line(linetype = "dotted"))
soi.plot %>% plotly::ggplotly()
그림1. 남방진동(SOI). 플롯 상에 마우스를 놓으면 윈도우가 나타나서 플롯을 인터랙티브하게 조작할 수 있음
ao = download_ao()
ao
ao.status = ao %>% mutate(status = if_else(AO >= 0, "positive", "negative"))
ao.plot = ggplot(data = ao.status, aes(x = Date, y = AO, fill = status))+
geom_col()+
# ggsci::scale_fill_d3() +
scale_fill_manual(values = c("red", "blue")) +
cowplot::theme_minimal_grid()+
labs(x = "", y = "AO Index") +
scale_y_continuous(breaks = seq(-3,3,1)) +
# scale_x_date(date_breaks = "10 years", date_labels = "%Y")+
theme(legend.position = "none", panel.grid = element_line(linetype = "dotted"))
ao.plot %>% plotly::ggplotly()
Summary
우리는 rsoi를 이용하여 R에서 SOI 데이터에 접근하고 ggplot2 패키지로 시각화하는 방법을 살펴보았다. 이러한 데이터를 수집하는 유일한 인덱스는 아님에 주의하자. roi 패키지는 다른 인텍스들을 다운로드하는 보다 많은 함수를 제공한다. 따라서 이 포스트에서 설명한 방법과 유사한 방식으로 보다 많은 다른 인텍스를 탐색하고 수집할 수 있다.
LS0tDQp0aXRsZTogInJzb2kg7Yyo7YKk7KeA66W8IO2ZnOyaqe2VnCBS7JeQ7IScIOuCqOuwqeynhOuPmeyngOyImCDrjbDsnbTthLAg7KCR6re87ZWY6riwIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQpyZWZlcmVuY2VzOg0KLSBpZDogQWxiZXJzMjAyMGENCiAgdGl0bGU6IFJzb2k6SW1wb3J0IFZhcmlvdXMgTm9ydGhlcm4gYW5kIFNvdXRoZXJuIEhlbWlzcGhlcmUgQ2xpbWF0ZSBJbmRpY2VzDQogIGF1dGhvcjoNCiAgLSBmYW1pbHk6IEFsYmVycw0KICAgIGdpdmVuOiBTYW0NCiAgVVJMOiAnaHR0cHM6Ly9DUkFOLlItcHJvamVjdC5vcmcvcGFja2FnZT1yc29pJw0KICBpc3N1ZWQ6DQogICAgeWVhcjogMjAyMA0KLSBpZDogV2lja2hhbTIwMTZhDQogIHRpdGxlOiBHZ3Bsb3QyOkVsZWdhbnQgR3JhcGhpY3MgZm9yIERhdGEgQW5hbHlzaXMNCiAgYXV0aG9yOg0KICAtIGZhbWlseTogV2lja2hhbQ0KICAgIGdpdmVuOiBIYWRsZXkNCiAgVVJMOiAnaHR0cDovL2dncGxvdDIub3JnLicNCiAgcHVibGlzaGVyOiBTcHJpbmdlci1WZXJsYWcgTmV3IFlvcmsNCiAgdHlwZTogYm9vaw0KICBpc3N1ZWQ6DQogICAgeWVhcjogMjAxNg0KLSBpZDogV2lja2hhbTIwMTdhDQogIHRpdGxlOiBUaWR5dmVyc2U6RWFzaWx5IEluc3RhbGwgYW5kIExvYWQgdGhlIOKAmVRpZHl2ZXJzZeKAmQ0KICBhdXRob3I6DQogIC0gZmFtaWx5OiBXaWNraGFtDQogICAgZ2l2ZW46IEhhZGxleQ0KICBVUkw6ICdodHRwczovL0NSQU4uUi1wcm9qZWN0Lm9yZy9wYWNrYWdlPXRpZHl2ZXJzZScNCiAgaXNzdWVkOg0KICAgIHllYXI6IDIwMTcNCi0gaWQ6IFdpY2toYW0yMDE4YQ0KICB0aXRsZTogRHBseXI6QSBHcmFtbWFyIG9mIERhdGEgTWFuaXB1bGF0aW9uDQogIGF1dGhvcjoNCiAgLSBmYW1pbHk6IFdpY2toYW0NCiAgICBnaXZlbjogSGFkbGV5DQogIC0gZmFtaWx5OiBGcmFuw6dvaXMNCiAgICBnaXZlbjogUm9tYWluDQogIC0gZmFtaWx5OiBIZW5yeQ0KICAgIGdpdmVuOiBMaW9uZWwNCiAgLSBmYW1pbHk6IE3DvGxsZXINCiAgICBnaXZlbjogS2lyaWxsICAgDQogIFVSTDogJ2h0dHBzOi8vQ1JBTi5SLXByb2plY3Qub3JnL3BhY2thZ2U9ZHBseXInDQogIGlzc3VlZDoNCiAgICB5ZWFyOiAyMDE4DQotLS0NCg0KDQoNCltNYXN1bWJ1a28gU2VtYmHsnZgg6rCc7J2467iU66Gc6re4XShodHRwczovL3NlbWJhLWJsb2cubmV0bGlmeS5hcHAvMDEvMTMvMjAyMC9hY2Nlc3Mtc291dGhlcm4tb3NjaWxsYXRpb24taW5kZXgtZGF0YS13aXRoLXJzb2ktcGFja2FnZS1pbi1yLynsnZgg7Y+s7Iqk7Yq466W8IOuyiOyXre2VmOyYgOydjA0KDQojIyDrk6TslrTqsIDrqbANCuuCqOu0ieynhOuPmeyngOyImChTT0kp64qUIO2YuOyjvOydmCAqVGFoaXRpKuyZgCAqRGFyd2luKiDsgqzsnbTsnZgg7KCV6rec7ZmU65CcIOuMgOq4sOyVlSDtjrjssKjroZwg7KCV7J2Y65Cc64ukLiDsnbQg7KeA7IiY64qUIOyXmOumrOuHqChFbCBOacOxbynsmYAg652864uI64OQKExhIE5pw7FhKSDrj5nslYjsl5Ag7Je064yAIO2DnO2PieyWkeydmCDshJzrtoDsmYAg64+Z67aA7IKs7J207JeQ7IScIOuwnOyDne2VmOuKlCDrjIDqt5zrqqjsnZgg64yA6riw7JWVIOuzgOuPmeqwkuydtOuLpC4g7J2867CY7KCB7Jy866GcIFNPSeydmCDsiqTrrLTrk5woU21vb3RoZWQpIOyLnOqzhOyXtOydgCDsl7TrjIAg7YOc7Y+J7JaRIOuPmeu2gO2VtOyXreyXkCDqsbjss5Ag7ZW07IiY7Jio64+E7J2YIOuzgOuPmeqzvCDrp6TsmrAg7J6YIOydvOy5mO2VnOuLpC4NCg0KU09J7J2YIOydjOydmCDqtazqsITsnYAg7YOA7J207Yuw7JeQ7ISc7J2YIGJlbG93LW5vcm1hbCDrjIDquLDslZXqs7wgRGFyd2lu7JeQ7ISc7J2YIGFib3ZlLW5vcm1hbCDrjIDquLDslZXsnYQg7J2Y66+47ZWc64ukLiBTT0nsnZgg7J2MKOyWkSnsnZgg6rCSIOyLnOq4sOuKlCDsl5jrpqzrh6go652864uI64OQKSDsl5DtlLzshozrk5wg7Iuc6riw7JeQIOuPmeu2gCDsl7TrjIDtg5ztj4nslpHsl5DshJwg67mE7KCV7IOB7KCB7Jy866GcIOuNlOyatCjssKjqsIDsmrQpIO2VtOyImOyZgCDsnbzsuZjtlZzri6QuIFNPSSDqs4TsgrDrsKnrspXsnYAgQ2xpbWF0ZSBQcmVkaWN0aW9uIENlbnRlciBTT0kg7Y6Y7J207KeA7JeQ7IScIO2ZleyduO2VoCDsiJgg7J6I64ukLg0KDQpAQWxiZXJzMjAyMGEg6rCAIOqwnOuwnO2VnCBgcnNvaWAg7Yyo7YKk7KeA64qUIOyXrOufrOqwgOyngOydmCDrtoHrsJjqtazsmYAg64Ko67CY6rWs7J2YIOq4sO2bhOyngOyImOyXkCDsoJHqt7ztlaDsiJgg7J6I64qUIO2ItOydhCDsoJzqs7XtlZzri6QuIOuMgO2RnOyggeyduCDsp4DsiJjroZzripQgDQotIFNvdXRoZXJuIE9zY2lsbGF0aW9uIEluZGV4DQotIE9jZWFuaWMgTmlubyBJbmRleA0KLSBOb3J0aCBQYWNpZmljIEd5cmUgT3NjaWxsYXRpb24NCi0gTm9ydGggQXRsYW50aWMgT3NjaWxsYXRpb24NCi0gQXJjdGljIE9zY2lsbGF0aW9uDQotIEFudGFyY3RpYyBPc2NpbGxhdGlvbg0KLSBNdWx0aXZhcmlhdGUgRU5TTyBJbmRleCBWZXJzaW9uIDINCg0K7J20IO2PrOyKpO2KuOyXkOyEnOuKlCDtjKjtgqTsp4Drpbwg7ISk7LmY7ZWY6rOgIOuNsOydtO2EsOulvCDri6TsmrTroZzrk5ztlZjsl6wg7Iuc6rCB7ZmU64qUIOuwqeuyleydhCDshKTrqoXtlZzri6QuIGByc29pYO2MqO2CpOyngOuKlCAnQ29tcHJlaGVuc2l2ZSBSIEFyY2hpdmUgTmV0d29yayAoQ1JBTikn7JeQ7IScIOydtOyaqe2VoCDsiJgg7J6I7Jy866mwIOyVhOuemOyZgCDqsJnsnbQg7LKt7YGsKGNodW5rKeuhnCDshKTsuZjtlaAg7IiYIOyeiOuLpC4NCg0KYGBge3J9DQojaW5zdGFsbC5wYWNrYWdlcygicnNvaSIpDQoNCmBgYA0KDQrtjKjtgqTsp4Drpbwg7ISk7LmY7ZWcIO2bhCDtlajsiJjrk6Tsl5Ag7KCR6re87ZWY6riwIOychO2VtCDshLjshZjsnLzroZwg7Yyo7YKk7KeA66W8IOu2iOufrOyZgOyVvCDtlZzri6QuIOuovOyggCBsaWJyYXJ5IO2VqOyImOulvCDsnbTsmqntlZjsl6wg7IS47IWY7Jy866GcIO2MqO2CpOyngOulvCDrtojrn6zsmKTqs6AsIOuNsOydtO2EsCDsobDsnpHqs7wg7ZSM66Gv7YyF7J2EIO2VmOq4sCDsnITtlZwg7Yi066GcIGB0aWR5dmVyc2VgW0BXaWNraGFtMjAxN2Fd7J2EIOu2iOufrOyYqOuLpC4NCmBgYHtyfQ0KbGlicmFyeShyc29pKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpgYGANCg0KcnNvaeydmCDsnqXsoJDsnYAg7KeA7IiY65Ok7J2EIOuLpOyatOuhnOuTnO2VmOuKlCDrqqjrk6Ag7ZWo7IiY6rCAIGRvd25sb2FkXyDri6TsnYzsl5Ag7Yq57KCV7ZWcIOyngOyImOuqheuTpOuhnCDsi5zsnpHtlZzri6TripQg6rKD7J2064ukLiDsmIjrpbwg65Ok7Ja0LCDtlajsiJggZG93bmxvYWRfc29p64qUIOuCqOuwqeynhOuPmeyngOyImCDrjbDsnbTthLDsl5Ag7KCR6re87ZWY6rOgIOuLpOyatOuhnOuTnCDtlZjripTrjbAg7IKs7Jqp65Cc64ukLiANCuuLpOyatOuhnOuTnOuQnCBTT0kg642w7J207YSw64qUIOuNsOydtO2EsO2UhOugiOyehCDtmJXsi53snbTqs6AgYHN0cmDtlajsiJjrgpggZHBseXIg7Yyo7YKk7KeAW0BXaWNraGFtMjAxOGFd7J2YIGBnbGltcHNlYO2VqOyImOuhnCDrjbDsnbTthLDshYvsnZgg64K067aA6rWs7KGw66W8IOyCtO2OtOuzvCDsiJgg7J6I64ukLiDtkZwgMS7snYAg64uk7Jq066Gc65Oc7ZWcIOuCqOuwqeyngOyImOqwkuydhCDqsITri6jtlZjqsowg67O07Jes7KSA64ukLiANCmBgYHtyfQ0Kc29pID0gZG93bmxvYWRfc29pKCkNCnNvaQ0KYGBgDQoNCuuNsOydtO2EsOulvCDslrvqsozrkJwg7ZuE7JeQ64qUIFNPSSDqsJLsnYQg7J2MKOyWkSnsnZgg7Iuc6riw66GcIOq1rOu2hO2VmOyXrCDsi5zqsIHtmZTtlaAg7IiYIOyeiOuLpC4g7J2064qUIOyXmOumrOuHqCjrnbzri4jrg5ApIOyXkO2UvOyGjOuTnCDsi5zquLDsl5Ag64+Z67aAIOyXtOuMgCDtg5ztj4nslpHsnZgg67mE7J207IOB7KCB7J24IOqzoOyImOyYqCjsoIDsiJjsmKgp6rO8IOydvOy5mO2VnOuLpC4g6re466a8IDHsnYAgKmdncGxvdDIq7Yyo7YKk7KeAW0BXaWNraGFtMjAxNmFd66GcIFNPSeydmCDsp4Trj5nsnYQg7ZSM66Gv7YyF7ZWcIOqyg+ydhCDrs7Tsl6zspIDri6QuIA0KDQpgYGB7cn0NCnNvaS5zdGF0dXMgPSBzb2kgJT4lIG11dGF0ZShzdGF0dXMgPSBpZl9lbHNlKFNPSSA+PSAwLCAicG9zaXRpdmUiLCAibmVnYXRpdmUiKSkNCg0Kc29pLnBsb3QgPSBnZ3Bsb3QoZGF0YSA9IHNvaS5zdGF0dXMsIGFlcyh4ID0gRGF0ZSwgeSA9IFNPSSwgZmlsbCA9IHN0YXR1cykpKw0KICBnZW9tX2NvbCgpKw0KICAjIGdnc2NpOjpzY2FsZV9maWxsX2QzKCkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJyZWQiLCAiYmx1ZSIpKSArDQogIGNvd3Bsb3Q6OnRoZW1lX21pbmltYWxfZ3JpZCgpKw0KICBsYWJzKHggPSAiIiwgeSA9ICJTT0kgSW5kZXgiKSArDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTMsMywxKSkgKw0KICAjIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxMCB5ZWFycyIsIGRhdGVfbGFiZWxzID0gIiVZIikrDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfbGluZShsaW5ldHlwZSA9ICJkb3R0ZWQiKSkNCg0Kc29pLnBsb3QgJT4lIHBsb3RseTo6Z2dwbG90bHkoKQ0KYGBgDQrqt7jrprwxLiDrgqjrsKnsp4Trj5koU09JKS4g7ZSM66GvIOyDgeyXkCDrp4jsmrDsiqTrpbwg64aT7Jy866m0IOyciOuPhOyasOqwgCDrgpjtg4DrgpjshJwg7ZSM66Gv7J2EIOyduO2EsOueme2LsOu4jO2VmOqyjCDsobDsnpHtlaAg7IiYIOyeiOydjA0KDQpgYGB7cn0NCmFvID0gZG93bmxvYWRfYW8oKQ0KYW8NCmBgYA0KDQpgYGB7cn0NCmFvLnN0YXR1cyA9IGFvICU+JSBtdXRhdGUoc3RhdHVzID0gaWZfZWxzZShBTyA+PSAwLCAicG9zaXRpdmUiLCAibmVnYXRpdmUiKSkNCg0KYW8ucGxvdCA9IGdncGxvdChkYXRhID0gYW8uc3RhdHVzLCBhZXMoeCA9IERhdGUsIHkgPSBBTywgZmlsbCA9IHN0YXR1cykpKw0KICBnZW9tX2NvbCgpKw0KICAjIGdnc2NpOjpzY2FsZV9maWxsX2QzKCkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJyZWQiLCAiYmx1ZSIpKSArDQogIGNvd3Bsb3Q6OnRoZW1lX21pbmltYWxfZ3JpZCgpKw0KICBsYWJzKHggPSAiIiwgeSA9ICJBTyBJbmRleCIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMywzLDEpKSArDQogICMgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjEwIHllYXJzIiwgZGF0ZV9sYWJlbHMgPSAiJVkiKSsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBwYW5lbC5ncmlkID0gZWxlbWVudF9saW5lKGxpbmV0eXBlID0gImRvdHRlZCIpKQ0KDQphby5wbG90ICU+JSBwbG90bHk6OmdncGxvdGx5KCkNCmBgYA0KDQojIyMgU3VtbWFyeQ0K7Jqw66as64qUIGByc29pYOulvCDsnbTsmqntlZjsl6wgUuyXkOyEnCBTT0kg642w7J207YSw7JeQIOygkeq3vO2VmOqzoCBgZ2dwbG90MmAg7Yyo7YKk7KeA66GcIOyLnOqwge2ZlO2VmOuKlCDrsKnrspXsnYQg7IK07Y6067O07JWY64ukLiDsnbTrn6ztlZwg642w7J207YSw66W8IOyImOynke2VmOuKlCDsnKDsnbztlZwg7J24642x7Iqk64qUIOyVhOuLmOyXkCDso7zsnZjtlZjsnpAuIGByb2lgIO2MqO2CpOyngOuKlCDri6Trpbgg7J247YWN7Iqk65Ok7J2EIOuLpOyatOuhnOuTnO2VmOuKlCDrs7Tri6Qg66eO7J2AIO2VqOyImOulvCDsoJzqs7XtlZzri6QuIOuUsOudvOyEnCDsnbQg7Y+s7Iqk7Yq47JeQ7IScIOyEpOuqhe2VnCDrsKnrspXqs7wg7Jyg7IKs7ZWcIOuwqeyLneycvOuhnCDrs7Tri6Qg66eO7J2AIOuLpOuluCDsnbjthY3siqTrpbwg7YOQ7IOJ7ZWY6rOgIOyImOynke2VoCDsiJgg7J6I64ukLg0KDQojIFJlZmVyZW5jZXMNCg0K